#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "svplot.h"
#include <QTime>
#include <QMessageBox>
#include <QString>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ovm.reset(new OrbitVirtualMachine());
    plot.reset(new SvPlot(ui->widget));
    sc.reset(new SatelliteController(ovm.get()));
    sc->SetPlot(plot.get());
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(RunClicked()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::SetupOVM(int i)
{
    /// Важный аспект!
    /// Предпологается, что мы используем правильный файл
    /// В ВМ изначально нет данных, требуется их загрузить.
    switch(i)
    {
        case 0:
            ovm.reset(new OVMBin1());
        break;
        case 1:
            ovm.reset(new OVMBin2());
        break;
        case 2:
            ovm.reset(new OVMBin3());
        break;
    }
    QString inputFile = ui->lineEdit->text();
    ovm->openFile(inputFile.toStdString());
    if (ui->enableFileLog->isChecked())
        ovm->setLog((inputFile+".log").toStdString());
    if (ui->generateCpp->isChecked())
        ovm->generateCpp((inputFile+".cpp").toStdString());
}

void MainWindow::SetupSC()
{
    sc.reset(new SatelliteController(ovm.get()));
    sc->SetPlot(ui->enableGraph->isChecked() ? plot.get() : 0);
    sc->SetTextEdit(ui->enableLog->isChecked() ? ui->textEdit : 0);
}

void MainWindow::RunClicked()
{
    QTime t;
    t.start();
    QApplication::setOverrideCursor(Qt::WaitCursor);
    ui->textEdit->clear();
    int ScenarioID = ui->lineEdit_2->text().toInt();
    SetupOVM(ui->comboBox->currentIndex());
    SetupSC();
    switch (ui->comboBox->currentIndex())
    {
        case 0:
        sc->SolveHohmannTaskMaximizeFuel(ScenarioID);
                break;
        case 1:
        sc->SolveMeetAndGreetTask(ScenarioID);
                break;
        case 2:
        sc->SolveClearSkies(ScenarioID);
                break;
    }
    QApplication::restoreOverrideCursor();
    ui->statusBar->showMessage(QString("ScenarioID %1 ; Time = %2 sec")
                .arg(ScenarioID)
                .arg(t.elapsed()/1000.0), 0);
}
